package com.situ.day250111;

import org.junit.Test;

import java.util.Random;
import java.util.Scanner;

public class MyTestXun {
    /*1、计算某年是不是闰年：
    能被4整除，但是不能被100整除    ||   能被400整除
if (() || ()) {
    }*/
    @Test
    public void test() {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入相应年份：");
        int year = sc.nextInt();
        if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
            System.out.println(year + " 是闰年");
        } else {
            System.out.println(year + " 不是闰年");
        }
    }

    //2、从控制台输入两个数,然后分别打印这两个数，然后交换这两个数的值
    @Test
    public void test2() {
        // 创建 Scanner 对象，用于从控制台读取输入
        Scanner scanner = new Scanner(System.in);

        // 输入第一个数字
        System.out.print("请输入第一个数字: ");
        int num1 = scanner.nextInt();

        // 输入第二个数字
        System.out.print("请输入第二个数字: ");
        int num2 = scanner.nextInt();

        // 打印输入的两个数字
        System.out.println("输入的第一个数字: " + num1);
        System.out.println("输入的第二个数字: " + num2);

        // 交换两个数字的值
        int temp = num1;
        num1 = num2;
        num2 = temp;

        // 打印交换后的数字
        System.out.println("交换后的第一个数字: " + num1);
        System.out.println("交换后的第二个数字: " + num2);

        // 关闭 Scanner 对象
        scanner.close();
    }

    //3.1、编写一个收银台收款程序，if
    //定义输入----单价、数量、用户输入金额
    //定义输出----应收金额、找零
    //使用double类型变量 scanner.nextDouble();
    //3.2、当总价>=500时候打八折
    //3.3、考虑程序出现异常的情况，如：收款金额小于应收金额
    //      若收款金额大于等于应收金额，则计算找零后输出
    //      若收款金额小于应收金额，输出错误信息。
    @Test
    public void test3() {
        // 创建 Scanner 对象，用于从控制台读取输入
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入单价：");
        double unitPrice = scanner.nextDouble();
        System.out.println("请输入数量：");
        double count = scanner.nextDouble();
        System.out.println("请输入金额");
        double price = scanner.nextDouble();
        double totalPrice = unitPrice * count;
        if (totalPrice >= 500) {
            totalPrice *= 0.8;
        }
        double returnPrice = price - totalPrice;
        if (returnPrice >= 0) {
            System.out.println("找零：" + returnPrice);
        } else {
            System.out.println("钱不够");
        }
    }

    /*输出一下结构：
            1
            12
            123
            1234
            12345*/
    @Test
    public void test4() {
        // 循环输出每一行
        for (int i = 1; i <= 5; i++) {
            // 内层循环输出每一行的数字
            for (int j = 1; j <= i; j++) {
                System.out.print(j); // 打印数字，不换行
            }
            System.out.println(); // 每行结束后换行
        }
    }

    /*打印正三角形和倒三角形
     *
     ***
     *****
     *******
     *********
     ************/
    @Test
    public void test5() {
        int height = 5; // 三角形的高度

        // 正三角形
        System.out.println("正三角形：");
        for (int i = 1; i <= height; i++) {
            // 打印空格
            for (int j = 1; j <= height - i; j++) {
                System.out.print(" ");
            }
            // 打印星号
            for (int j = 1; j <= 2 * i - 1; j++) {
                System.out.print("*");
            }
            // 换行
            System.out.println();
        }

        // 倒三角形
        System.out.println("\n倒三角形：");
        for (int i = height; i >= 1; i--) {
            // 打印空格
            for (int j = 1; j <= height - i; j++) {
                System.out.print(" ");
            }
            // 打印星号
            for (int j = 1; j <= 2 * i - 1; j++) {
                System.out.print("*");
            }
            // 换行
            System.out.println();
        }
    }

    //计算1-100以内所有奇数的和以及所有偶数的和，分别打印出来
    @Test
    public void test6() {
        int sumOdd = 0;  // 奇数的和
        int sumEven = 0; // 偶数的和

        // 遍历 1 到 100 的所有数字
        for (int i = 1; i <= 100; i++) {
            if (i % 2 == 0) {
                sumEven += i;  // 偶数累加到 sumEven
            } else {
                sumOdd += i;   // 奇数累加到 sumOdd
            }
        }

        // 打印结果
        System.out.println("1 到 100 之间所有奇数的和是: " + sumOdd);
        System.out.println("1 到 100 之间所有偶数的和是: " + sumEven);
    }

    //用for循环输出1—1000之间能被5整除的数，且每行输出3个
    @Test
    public void test7() {
        int count = 0;  // 用于计数每行输出的数字个数

        // 遍历 1 到 1000 之间的数字
        for (int i = 1; i <= 1000; i++) {
            if (i % 5 == 0) {  // 判断是否能被 5 整除
                System.out.print(i + "\t");  // 输出数字，并用制表符分隔

                count++;  // 增加输出计数

                // 每行输出 3 个数字后换行
                if (count % 3 == 0) {
                    System.out.println();
                }
            }
        }
    }

    //计算9的阶乘
    @Test
    public void test8() {
        int num = 9;  // 计算 9 的阶乘
        long factorial = 1;  // 使用 long 类型以防止溢出

        // 计算阶乘
        for (int i = 1; i <= num; i++) {
            factorial *= i;  // 逐步乘积
        }

        // 输出结果
        System.out.println("9 的阶乘是: " + factorial);
    }

    //九九乘法表
    @Test
    public void test9() {
        // 外层循环控制行数
        for (int i = 1; i <= 9; i++) {
            // 内层循环控制列数
            for (int j = 1; j <= i; j++) {
                // 输出乘法表中的每一项，格式为 "i * j = product"
                System.out.print(j + " * " + i + " = " + (i * j) + "\t");
            }
            // 每一行输出完后换行
            System.out.println();
        }
    }

    /*之前用if-else做的程序，使用switch完成：

=90    <=100    优秀
=80    <90      良好
=70    <80      一般
=60    <70      及格
<60            不及格*/
    @Test
    public void test10() {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入成绩：");
        int score = sc.nextInt();
        if (score < 0 || score > 100) {
            System.out.println("这是非法输入");
            return;
        }
        // 转换成绩为等级
        String grade;

        // 使用 switch 判断等级
        switch (score / 10) {
            case 10:  // 90-100
            case 9:
                grade = "优秀";
                break;
            case 8:   // 80-89
                grade = "良好";
                break;
            case 7:   // 70-79
                grade = "一般";
                break;
            case 6:   // 60-69
                grade = "及格";
                break;
            default:   // < 60
                grade = "不及格";
                break;
        }

        // 输出结果
        System.out.println("成绩等级: " + grade);

        // 关闭扫描器
        sc.close();
    }

    @Test
    public void test11() {

        //短路
        int num1 = 3;
        int num2 = 5;

        //||短路
        System.out.println(num1 > 0 && num1++ < num2);//true
        System.out.println(num1);//3
        System.out.println(num2);//5
    }

    @Test
    public void test12() {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入成绩1：");
        int score1 = sc.nextInt();
        System.out.println("请输入成绩2：");
        int score2 = sc.nextInt();
        //卫操作
        if ((score1 < 0 || score1 > 100) || (score2 < 0 || score2 > 100)) {
            System.out.println("非法输入");
            return;
        }
        int max = score1 >= score2 ? score1 : score2;
        System.out.println(max);
    }

    //数一下符合条件的有多少个（计算1-100以内7的倍数的个数
    @Test
    public void test13() {
        int count = 0;
        for (int i = 0; i < 100; i++) {
            if (i % 7 == 0) {
                System.out.println(i);
                count++;
            }
        }
        System.out.println("count:" + count);
    }

    @Test
    public void test14() {
        Random random = new Random();
        int num=random.nextInt(100)+1;
        System.out.println(num);
    }
}

